namespace CodeToHtml {
    public class CodeReaderParameters {
        private static readonly string[] CSHARP_KEYWORDS = new[]
        {
            "abstract","event","new","struct","as","explicit","null","switch","base","extern","object","this",
            "bool","false","operator","throw","break","finally","out","true","byte","fixed","override","try","case","float",
            "params","typeof","catch","for","private","uint","char","foreach","protected","ulong","checked","goto","public",
            "unchecked","class","if","readonly","unsafe","const","implicit","ref","ushort","continue","in","return","using",
            "decimal","int","sbyte","virtual","default","interface","sealed","volatile","delegate","internal","short","void",
            "do","is","sizeof","while","double","lock","stackalloc","else","long","static","enum","namespace","string"
        };

        public string[] LineComments { get; set; }
        public string[] BlockCommentStarts { get; set; }
        public string[] BlockCommentStops { get; set; }
        public char[] EscapeCharacters { get; set; }
        public string[] StringCharacters { get; set; }
        public string[] StringLiteralPrefixes { get; set; }
        public char[] Delimiters { get; set; }
        public string[] Keywords { get; set; }

        public static CodeReaderParameters CreateCSharpParameters() {
            CodeReaderParameters codeReaderParameters = new CodeReaderParameters {
                LineComments = new[] { "//" },
                BlockCommentStarts = new[] { "/*" },
                BlockCommentStops = new[] { "*/" },
                EscapeCharacters = new[] { '\\' },
                StringCharacters = new[] { "\"", "\'" },
                StringLiteralPrefixes = new[] { "@" },
                Delimiters = new[] { '~', '!', '%', '^', '&', '*', '(', ')', '-', '+', '=', '|', '\\', '/', '{', '}', '[', ']', ':', ';', '\'', '\"', '<', '>', '.', '?', ' ', '\t', '\n' },
                Keywords = CSHARP_KEYWORDS
            };
            return codeReaderParameters;
        }
    }
}